package net.wanho.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.wanho.dto.StorePageQueryDTO;
import net.wanho.mapper.StoreMapper;
import net.wanho.po.Store;
import net.wanho.service.StoreService;
import net.wanho.vo.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * @author 32033
 * @description 针对表【store(仓库表)】的数据库操作Service实现
 * @createDate 2025-01-11 17:01:23
 */
@Service
public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store>
        implements StoreService {

    @Override
    public PageInfo<Store> getStorePage(int pageNum, int pageSize, Store store) {
        Page<Store> page = new Page<>(pageNum, pageSize);
        LambdaQueryWrapper<Store> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(!ObjectUtils.isEmpty(store.getStoreName()), Store::getStoreName, store.getStoreName());
        wrapper.like(!ObjectUtils.isEmpty(store.getStoreAddress()), Store::getStoreAddress, store.getStoreAddress());
        wrapper.like(!ObjectUtils.isEmpty(store.getConcat()), Store::getConcat, store.getConcat());
        wrapper.like(!ObjectUtils.isEmpty(store.getPhone()), Store::getPhone, store.getPhone());
        this.baseMapper.selectPage(page, wrapper);

        PageInfo<Store> pageInfo = new PageInfo<>();
        pageInfo.setPageNum(page.getCurrent());
        pageInfo.setPageSize(page.getSize());
        pageInfo.setTotalNum(page.getTotal());
        pageInfo.setPageCount(page.getCurrent());
        pageInfo.setResultList(page.getRecords());
        return pageInfo;
    }

    @Override
    public Store selectOneByStoreNum(Integer storeNum) {
        return this.baseMapper.selectByStoreNum(storeNum);
    }


    @Override
    public List<Store> exportTable(StorePageQueryDTO queryDTO) {
//        TODO 之前使用的方法未解决
//        Page<Store> page = new Page<>(pageNum, pageSize);
//        LambdaQueryWrapper<Store> wrapper = new LambdaQueryWrapper<>();
//        wrapper.like(!ObjectUtils.isEmpty(store.getStoreName()), Store::getStoreName, store.getStoreName());
//        wrapper.like(!ObjectUtils.isEmpty(store.getStoreAddress()), Store::getStoreAddress, store.getStoreAddress());
//        wrapper.like(!ObjectUtils.isEmpty(store.getConcat()), Store::getConcat, store.getConcat());
//        wrapper.like(!ObjectUtils.isEmpty(store.getPhone()), Store::getPhone, store.getPhone());
//        this.page(page, wrapper);
//        return page.getRecords();

        // 1. 构建查询条件
        LambdaQueryWrapper<Store> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(StringUtils.hasText(queryDTO.getStoreName()), Store::getStoreName, queryDTO.getStoreName())
                .like(StringUtils.hasText(queryDTO.getStoreAddress()), Store::getStoreAddress, queryDTO.getStoreAddress())
                .like(StringUtils.hasText(queryDTO.getConcat()), Store::getConcat, queryDTO.getConcat())
                .like(StringUtils.hasText(queryDTO.getPhone()), Store::getPhone, queryDTO.getPhone())
                .orderByAsc(Store::getStoreId);

        // 2. 执行分页查询
        Page<Store> page = new Page<>(queryDTO.getPageNum(), queryDTO.getPageSize());
        Page<Store> storePage = this.page(page, wrapper);

        return storePage.getRecords();
    }
}




